//******************************************************************************
//
// Copyright (c) 2016 Microsoft Corporation. All rights reserved.
//
// This code is licensed under the MIT License (MIT).
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
//******************************************************************************
#pragma once

#import <Foundation/NSExpression.h>

#import "NSExpressionConstantValue.h"
#import "NSExpressionEvaluatedObject.h"
#import "NSExpressionFunction.h"
#import "NSExpressionKeyPath.h"
#import "NSExpressionVariable.h"

@class NSExpression;
@class NSString;

typedef NSExpression* (^nextArgument)(NSString* type);

@interface NSExpression (Internal)
+ (NSExpression*)expressionForConstantValueTrue;
+ (NSExpression*)expressionForConstantValueFalse;
+ (NSExpression*)expressionforKeyValueAccess:(NSExpression*) rightExpression leftExpression:(NSExpression*) leftExpression;
- (NSExpression*) expressionWithSubstitutionVariables:(NSDictionary*)variables;
@end


@interface NSComparisonPredicate (Internal)
+ (NSComparisonPredicateOptions)extractOptions:(NSString*)option;
@end
